package com.whfc.common.third.huace;

import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class HuaCeApi {
    
    private static final Logger logger = LoggerFactory.getLogger(HuaCeApi.class);
    
    // 配置对象（需要在调用前设置）
    private static HuaCeProperties config;
    
    /**
     * 设置配置对象
     * @param config 华测配置
     */
    public static void setConfig(HuaCeProperties config) {
        HuaCeApi.config = config;
    }
    
    /**
     * 华测系统登录获取token
     * @return token值，登录失败返回null
     */
    public static String login() {
        if (config == null) {
            logger.error("华测配置未初始化，请先调用setConfig方法设置配置");
            return null;
        }
        
        try {
            // 构建登录请求参数
            Map<String, Object> loginParams = new HashMap<>();
            loginParams.put("username", config.getUsername());
            loginParams.put("password", config.getPassword());
            loginParams.put("isCheck", true);
            
            String jsonBody = JSONUtil.toJsonStr(loginParams);
            
            // 发送登录请求
            HttpResponse response = HttpRequest.post(config.getLoginUrl())
                    .body(jsonBody)
                    .execute();
            
            if (response.isOk()) {
                String responseBody = response.body();
                JSONObject jsonObject = JSONUtil.parseObj(responseBody);
                
                if (jsonObject.getInt("code") == 200) {
                    JSONObject data = jsonObject.getJSONObject("data");
                    String tokenValue = data.getStr("tokenValue");
                    logger.info("华测系统登录成功，获取到token: {}", tokenValue);
                    return tokenValue;
                } else {
                    logger.error("华测系统登录失败，响应: {}", responseBody);
                }
            } else {
                logger.error("华测系统登录请求失败，状态码: {}", response.getStatus());
            }
        } catch (Exception e) {
            logger.error("华测系统登录异常", e);
        }
        return null;
    }
    
    /**
     * 查询华测告警信息
     * @param token 登录token
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 告警信息JSON字符串
     */
    public static String getAlarmInfo(String token, String startTime, String endTime) {
        if (config == null) {
            logger.error("华测配置未初始化，请先调用setConfig方法设置配置");
            return null;
        }
        
        try {
            // 构建查询参数
            Map<String, Object> queryParams = new HashMap<>();
            queryParams.put("current", 1);
            queryParams.put("size", config.getPageSize());
            
            Map<String, Object> condition = new HashMap<>();
            condition.put("startTime", startTime);
            condition.put("endTime", endTime);
            queryParams.put("condition", condition);
            queryParams.put("orderBy", "");
            
            String jsonBody = JSONUtil.toJsonStr(queryParams);
            
            // 发送告警信息查询请求
            HttpResponse response = HttpRequest.post(config.getAlarmInfoUrl())
                    .header("satoken", token)
                    .body(jsonBody)
                    .execute();
            
            if (response.isOk()) {
                String responseBody = response.body();
                JSONObject jsonObject = JSONUtil.parseObj(responseBody);
                
                if (jsonObject.getInt("code") == 200) {
                    logger.info("华测告警信息查询成功");
                    return responseBody;
                } else {
                    logger.error("华测告警信息查询失败，响应: {}", responseBody);
                }
            } else {
                logger.error("华测告警信息查询请求失败，状态码: {}", response.getStatus());
            }
        } catch (Exception e) {
            logger.error("华测告警信息查询异常", e);
        }
        return null;
    }
}